<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /* 
        循环: 
            for  强调过程,如何做?
            forEach map some every reduce : 函数式编程思维,强调结果做什么? 过程抽象
        */

        //forEach   获取循环的键值 键名 和 原本数组 
        // let arr = ["张三", "李四", "王五"]
        // arr.forEach((item, key, arr) => {
        //     console.log(item, key, arr);
        // })


        //函数的定义(原生实现forEach)
        // myForEach = (arr, fn) => {
        //     for (var i = 0; i < arr.length; i++) {
        //         fn(arr[i], i, arr);
        //     }
        // }


        //方法添加到原型上
        // Array.prototype.myForEach = function (fn) {
        //     for (var i = 0; i < this.length; i++) {
        //         fn(this[i], i, this);
        //     }
        // }


        // arr.myForEach((item, key, arr) => {
        //     console.log(item, key, arr);
        // })

        //函数的调用
        // myForEach(arr, (item, key, arr) => {
        //     console.log(item, key, arr);
        // })




        //map循环   映射

        let arr = ["张三", "李四", "王五"];

        //映射一个相同的数组
        // let res = arr.map((item, key, arr) => {
        //     return item
        // })
        // console.log(res);

        //函数定义(原生实现map)
        myMap = (arr, fn) => {
            let result = [];
            for (var i = 0; i < arr.length; i++) {
                let res = fn(arr[i], i, arr)
                result.push(res);
            }
            return result;
        }

        let res = myMap(arr,(item,key,arr)=>{
            console.log(item,key,arr);
            return item;
        })

        console.log(res);
    </script>
</body>

</html>